﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace OEMS
{
    /// <summary>
    /// User add/edit form
    /// </summary>
    /// <author>Nick Lauryssen</author>
    public partial class GebruikersForm : Form
    {
        private GebruikersEditForm editForm;
        private String selectedUser;
        String[] users = new String[Properties.Settings.Default.Users.Count];

        public GebruikersForm(GebruikersEditForm form)
        {
            InitializeComponent();
            editForm = form;
            btnOk.Text = "Add";
            this.Text = "Add user";
            Properties.Settings.Default.Users.CopyTo(users, 0);
        }

        public GebruikersForm(GebruikersEditForm form, String user)
        {
            InitializeComponent();
            editForm = form;
            selectedUser = user;
            txtUsername.Text = selectedUser;
            setRechten(Properties.Settings.Default.Users.IndexOf(selectedUser));
            btnOk.Text = "Edit";
            this.Text = "Edit user";
            Properties.Settings.Default.Users.CopyTo(users, 0);
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (btnOk.Text.Equals("Add"))
            {
                if (checkUserName(txtUsername.Text))
                {
                    if (checkPassw(txtPassword.Text, txtPassword2.Text))
                    {
                        Properties.Settings.Default.Users.Add(txtUsername.Text);
                        Properties.Settings.Default.Passwords.Add(txtPassword.Text);
                        Properties.Settings.Default.Rechten.Add(getRechten());
                        editForm.updateList();
                        this.Dispose();
                    }
                    else
                    {
                        lblError.Text = "De paswoorden komen niet overeen.";
                        resetForm();
                    }
                }
                else
                {
                    lblError.Text = "Deze username is al in gebruik.";
                    resetForm();
                }
            }
            else
            {
                int i = 0;
                foreach (String user in users)
                {
                    if (selectedUser.Equals(user))
                    {
                        if (checkPassw(txtPassword.Text, txtPassword2.Text))
                        {
                            Properties.Settings.Default.Users[i] = txtUsername.Text;
                            Properties.Settings.Default.Passwords[i] = txtPassword.Text;
                            Properties.Settings.Default.Rechten[i] = getRechten();
                            editForm.updateList();
                            this.Dispose();
                            break;
                        }
                    }
                    i++;
                }
            }
        }
        /// <summary>
        /// Controleert of een gebruikersnaam al bestaat
        /// </summary>
        /// <param name="user">Die gebruikersnaam die moet worden toegevoegd</param>
        /// <returns>Boolean die true is als de gebruiker niet bestaat</returns>
        /// <author>Nick Lauryssen</author>
        private Boolean checkUserName(String user)
        {
            Boolean collision = true;

            foreach (String usn in users)
            {
                if (user.Equals(usn)) 
                {
                    collision = false;
                    break;
                }
            }
            return collision;
        }
        /// <summary>
        /// Controleert of de ingegeven paswoorden overeenkomen
        /// </summary>
        /// <param name="pass1">Het eerste paswoord</param>
        /// <param name="pass2">Het tweede paswoord</param>
        /// <returns>Boolean die true is als de paswoorden overeenkomen</returns>
        /// <author>Nick Lauryssen</author>
        private Boolean checkPassw(String pass1, String pass2)
        {
            if (pass1.Equals(pass2))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// Maak het form leeg en zorgt ervoor dat txtUsername de focus krijgt
        /// </summary>
        /// <author>Nick Lauryssen</author>
        private void resetForm()
        {
            txtUsername.ResetText();
            txtUsername.Focus();
            txtPassword.ResetText();
            txtPassword2.ResetText();
        }
        /// <summary>
        /// Controleert welke rechten een gebruiker krijgt
        /// </summary>
        /// <returns>String met de rechten in</returns>
        /// <author>Nick Lauryssen</author>
        private String getRechten()
        {
            if (rdbAdmin.Checked)
            {
               return "Admin";
            }
            else
            {
               return "User";
            }
        }
        /// <summary>
        /// Bij het aanpassen van een gebruiker duid hij in het form aan welke rechten de geselecteerde gebruiker heeft
        /// </summary>
        /// <param name="place">De plaats van de geselecteerde gebruiker in de settings</param>
        /// <author>Nick Lauryssen</author>
        private void setRechten(int place)
        {
            if (Properties.Settings.Default.Rechten[place].Equals("Admin"))
            {
                rdbAdmin.Checked = true;
            }
        }
    }
}
